#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <QDialog>
#include<QTcpServer>
#include<QTcpSocket>
#include<QTime>
#include<QFileDialog>
#include<QString>
#include<QCloseEvent>
#include<QHostAddress>

namespace Ui {
class TcpClient;
}

class TcpClient : public QDialog
{
    Q_OBJECT

public:
    explicit TcpClient(QWidget *parent = nullptr);
    ~TcpClient() override;

    // 设置要传送的文件名
    void setFileName(const QString& fileName);
    // 设置服务器地址
    void setHostAddress(QHostAddress address);

    // 读取文件
    void closeEvent(QCloseEvent *) override;

    QFile *localFile;                               // 要发送的文件

private slots:
    void on_tcpClientCancleBtn_clicked();
    void on_tcpClientCloseBtn_clicked();

    void readMessage();

    void displayError(QAbstractSocket::SocketError);

    void newConnect();

private:
    Ui::TcpClient *ui;

    QTcpSocket *tcpClient;                          // 通信套接字
    qint16  tcpPort ;                               // 端口号

    QHostAddress hostAddress;                       // 服务器地址

    qint64 TotalBytes ;                             // 总共需要发送的数据大小
    qint64 bytesReceived;                           // 已经接收数据大小
    qint64 fileNameSize ;                           // 文件名大小
    qint64 blockSize{};                             // 每次发送数据的大小
    QString fileName;                               // 文件名

    QTime time;                                     // 计时器
    QByteArray inBlock;                             // 数据缓冲区
};

#endif // TCPCLIENT_H
